# -*- coding: utf-8 -*-
"""对话框管理模块"""

import tkinter as tk
from tkinter import ttk, filedialog, messagebox


class DialogManager:
    """提供各类标准和自定义对话框组件"""

    def show_file_dialog(self, title, file_types):
        """显示文件选择对话框

        Args:
            title: 对话框标题
            file_types: 文件类型列表，格式为[("描述", "*.ext")]

        Returns:
            str: 选中的文件路径，如果取消则返回空字符串
        """
        root = tk.Tk()
        root.withdraw()  # 隐藏主窗口
        file_path = filedialog.askopenfilename(
            title=title, filetypes=file_types
        )
        root.destroy()
        return file_path

    def show_save_dialog(self, title, file_types, default_filename=None):
        """显示保存文件对话框

        Args:
            title: 对话框标题
            file_types: 文件类型列表
            default_filename: 默认文件名

        Returns:
            str: 保存的文件路径，如果取消则返回空字符串
        """
        root = tk.Tk()
        root.withdraw()
        file_path = filedialog.asksaveasfilename(
            title=title,
            filetypes=file_types,
            defaultextension=file_types[0][1] if file_types else "",
            initialfile=default_filename,
        )
        root.destroy()
        return file_path

    def show_settings_dialog(self, current_settings):
        """显示设置对话框

        Args:
            current_settings: 当前设置字典

        Returns:
            dict: 更新后的设置字典，如果取消则返回None
        """
        # 简化实现，实际应用中应创建更复杂的设置对话框
        result = {}  # 这里应该返回用户设置的结果
        return result

    def show_message_dialog(self, title, message, message_type="info"):
        """显示消息对话框

        Args:
            title: 对话框标题
            message: 消息内容
            message_type: 消息类型，可选值为"info", "warning", "error", "question"

        Returns:
            bool: 如果是询问对话框，返回用户的选择；否则返回None
        """
        if message_type == "info":
            return messagebox.showinfo(title=title, message=message)
        elif message_type == "warning":
            return messagebox.showwarning(title=title, message=message)
        elif message_type == "error":
            return messagebox.showerror(title=title, message=message)
        elif message_type == "question":
            return messagebox.askyesno(title=title, message=message)
        else:
            return messagebox.showinfo(title=title, message=message)

    def show_progress_dialog(self, title, max_value):
        """显示进度对话框

        Args:
            title: 对话框标题
            max_value: 进度最大值

        Returns:
            object: 进度对话框对象，用于更新进度
        """

        # 简化实现，实际应用中应创建进度对话框类
        class ProgressDialog:
            def __init__(self):
                self.root = tk.Toplevel()
                self.root.title(title)
                self.progress = ttk.Progressbar(self.root, maximum=max_value)
                self.progress.pack(fill=tk.X, padx=10, pady=10)
                self.root.update()

            def update(self, value):
                self.progress["value"] = value
                self.root.update()

            def close(self):
                self.root.destroy()

        return ProgressDialog()
